- memcpy(dxva_data + start_code_size,
- ctx_pic->bitstream + slice->dwSliceDataLocation, slice_size);
- if (padding > 0)
- memset(dxva_data + start_code_size + slice_size, 0, padding);
- slice->dwSliceBitsInBuffer = 8 * data_size;
+ slice->dwSliceDataLocation = current - dxva_data;
+
+ if (i < ctx_pic->slice_count - 1)
+ slice->wNumberMBsInSlice =
+ slice[1].wNumberMBsInSlice - slice[0].wNumberMBsInSlice;
+ else
+ slice->wNumberMBsInSlice =
+ mb_count - slice[0].wNumberMBsInSlice;
+
+ /* write the appropriate frame, field or slice start code */
+ if (start_code_size) {
+ memcpy(current, start_code, start_code_size);
+ if (i == 0 && v->second_field)
+ current[3] = 0x0c;
+ else if (i > 0)
+ current[3] = 0x0b;
+
+ current += start_code_size;
+ slice->dwSliceBitsInBuffer += start_code_size * 8;
+ }
+
+ memcpy(current, &ctx_pic->bitstream[position], size);
+ current += size;